home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / drivers / ibmpc / hgc.c < prev    next >
C/C++ Source or Header  |  1991-09-29  |  2KB  |  157 lines

  1. #include "vogl.h"
  2.  
  3. #define H_PIX_ASPECT    1.45   /* For real PC monitor */
  4. /*#define H_PIX_ASPECT    1.0    /* For SUN emulator */
  5. extern    unsigned    int    _cur_color;
  6.  
  7. extern    void    
  8.         hgc_tmode(),
  9.         hgc_gmode(),
  10.         hgc_config(),
  11.         set_loc(),
  12.         hgcline();
  13.  
  14. extern    int    hgc_clear(),
  15.         hgc_backbuf(),
  16.         pc_fill(),
  17.         pc_font(),
  18.         pc_getkey(),
  19.         pc_checkkey(),
  20.         pc_locator(),
  21.         pc_string(),
  22.         hgc_frontbuf(),
  23.         hgc_swapbuf(),
  24.         setmode();
  25.  
  26. static    int
  27. noop()
  28. {
  29.     return (-1);
  30. }
  31.  
  32.  
  33. static int
  34. hgc_init()
  35. {
  36.     vdevice.sizeX = 347 * H_PIX_ASPECT;
  37.     vdevice.sizeY = 347;
  38.     vdevice.sizeSx = 719;
  39.     vdevice.sizeSy = 347;
  40.     vdevice.depth = 1;
  41.     hgc_config();
  42.     hgc_gmode();    /* Also sets _buffer_segment */
  43.     _cur_color = 0;
  44.     hgc_clear();
  45.     _cur_color = 1;
  46.     set_loc(5);    /* For the mouse */
  47.     pc_locinit(vdevice.sizeSx, vdevice.sizeSy);
  48.     return (1);
  49. }
  50.  
  51. /* 
  52.  * hgc_vclear
  53.  *
  54.  *    Just clears the current viewport.
  55.  */
  56. static
  57. hgc_vclear()
  58. {
  59.     int     x[4], y[4];
  60.  
  61.     if (vdevice.maxVx != vdevice.sizeSx
  62.         || vdevice.maxVy != vdevice.sizeSy
  63.         || vdevice.minVx != vdevice.sizeSx
  64.         || vdevice.minVy != vdevice.sizeSy) {
  65.         x[0] = x[3] = vdevice.minVx;
  66.         y[0] = y[1] = vdevice.maxVy;
  67.         y[2] = y[3] = vdevice.minVy;
  68.         x[1] = x[2] = vdevice.maxVx;
  69.  
  70.         pc_fill(5, x, y);
  71.     } else {
  72.         hgc_clear();
  73.     }
  74.  
  75.     return(0);
  76. }
  77.  
  78. /*
  79.  * hgc_exit
  80.  *
  81.  *    Sets the display back to text mode.
  82.  */
  83. static
  84. hgc_exit()
  85. {
  86.     unshowmouse();
  87.     /*hgc_tmode();
  88.     _cur_color = 0;
  89.     _hgc_clear();
  90.     */
  91.     (void)setmode(3);
  92.     return (1);
  93. }
  94.  
  95. static
  96. hgc_draw(x, y)
  97.     int    x, y;
  98. {
  99.     hgcline(vdevice.cpVx, vdevice.sizeSy - vdevice.cpVy, x, vdevice.sizeSy - y, _cur_color);
  100.     vdevice.cpVx = x;
  101.     vdevice.cpVy = y;
  102.  
  103.     return(0);
  104. }
  105.  
  106. static
  107. hgc_char(c)
  108.     int    c;
  109. {
  110.     hgcchar(c, vdevice.cpVx, vdevice.sizeSy - vdevice.cpVy, _cur_color, 1 - _cur_color);
  111.  
  112.     return(0);
  113. }
  114.  
  115. static
  116. hgc_color(i)
  117.     int    i;
  118. {
  119.     _cur_color = (i > 0 ? 1 : 0);
  120.  
  121.     return(0);
  122. }
  123.  
  124. static DevEntry hgcdev = {
  125.     "hercules",
  126.     "large",
  127.     "small",
  128.     hgc_backbuf,
  129.     hgc_char,
  130.     pc_checkkey,
  131.     hgc_vclear,
  132.     hgc_color,
  133.     hgc_draw,
  134.     hgc_exit,
  135.     pc_fill,
  136.     pc_font,
  137.     hgc_frontbuf,
  138.     pc_getkey,
  139.     hgc_init,
  140.     pc_locator,
  141.     noop,
  142.     pc_string,
  143.     hgc_swapbuf
  144. };
  145.  
  146. /*
  147.  * _hgc_devcpy
  148.  *
  149.  *    copy the pc device into vdevice.dev.
  150.  */
  151. _hgc_devcpy()
  152. {
  153.     vdevice.dev = hgcdev;
  154.     return(0);
  155. }
  156.  
  157.